import java.util.Scanner;



//又臭又长 写到后面逻辑完全混淆！
//class Solution {
//    public String addStrings(String num1, String num2) {
//        // 《《对字符进行加减乘除运算，均是对其ASCII码值进行计算》》
//        //吃完饭回来继续干穿这个代码！！！！
//
//        //是使用字符串进行记录 还是使用字符数组进行接收？
//        //不需要考虑这个 这并不是重点
//
//        //1：使用ret进行倒序记录
//        String ret = "";
//
//        //2：按照字符串地长度进行分类，目的是：防止数组越界访问
//        String small = num1.length()<=num2.length() ? num1 : num2;
//        String big = num1.length()>=num2.length() ? num1 : num2;
//
//        //设定i j 记录下标，flag用来确定进位
//        int i = small.length()-1;
//        int j = big.length()-1;
//        char flag = '0';
//
//        //i>=0 可以访问到0下标
//        while(i >= 0) {
//            //从个位开始计算，如果两个相加小于10（ASCII码值小于106），那么这两个字符就可以直接相加赋给ret（不用进位）
//            /**
//             * 可能出现的情景1：123 + 78
//             * 连续两次都需要进位，那么第二次判定应该是 flag + 2 + 7 < 10 这样才符合逻辑*/
//
//            //flag ‘0’ ASCII码值=48，每次使用flag均需要减去48，以达到+1和+0的区别
//            if((small.charAt(i)+big.charAt(j)+flag-48)<106) {
//                ret+=(small.charAt(i)+big.charAt(j)+flag-48-96);
//                flag='0';
//            } else {
//                ret+=(small.charAt(i)+big.charAt(j)+flag-106-48);
//                flag='1';
//            }
//            j--;
//            i--;
//        }
//        if(j>=0) {
//            //直接判定flag的ASCII码值
//            if(flag==49) {
//                while(j>=0) {
//                    if(big.charAt(j)+flag-48 < 106) {
//                        ret+=(big.charAt(j)+flag-48-48);
//                        flag=48;
//                    } else {
//                        ret+=(big.charAt(j)+flag-106-48);
//                        flag=49;
//                    }
//                    j--;
//                }
//            } else {
//                //当无需进位时，直接将剩下的值赋给ret即可
//                while(j>=0) {
//                    ret+=(big.charAt(j)-48);
//                    j--;
//                }
//            }
//        }
//        char[] chars = new char[ret.length()];
//        int len = chars.length-1;
//        for(int k = 0; k < ret.length(); k++) {
//            chars[len] = ret.charAt(k);
//            len--;
//        }
//        String rett = new String(chars);
//        return rett;
//    }
//}
class Test<T> {
    //仅为演示
    private Object[] array = new Object[10];

    //创建设置方法
    public void setArray(int pos, T base) {
        this.array[pos] = base;
    }
    public T getArray(int pos) {
        return (T)array[pos];
    }
}
public class Main {

    public static void main(String[] args) {
        //泛型知识
        //泛型，说白了就是传递类型
        Test<Integer> test = new Test<Integer>();
        test.setArray(0,80);
        test.setArray(1,100);

        System.out.println(test.getArray(0));
        System.out.println(test.getArray(1));
        
        Test<String> stringTest = new Test<String>();
        stringTest.setArray(0,"hello");
        stringTest.setArray(1,"world");

        System.out.println(stringTest.getArray(0));
        System.out.println(stringTest.getArray(1));

    }

    public static void main4(String[] args) {
//            System.out.println(a);
//            System.out.println(a1);
//            System.out.println(b);
//            System.out.println(b1);
        //隐式拆箱
        //隐式装箱//显式拆箱 //显式装箱
        Integer a1 = Integer.valueOf(10);


        int b1 = a1.intValue();



        Integer a = 10;
        int b = a;


        double dou = a.doubleValue();
        System.out.println(dou);

        Float f = Float.valueOf(b);
        System.out.println(f);
    }
    public static void main2(String[] args) {
//        Integer a = Integer.valueOf(12);//-->显式装箱/包
//        Integer b = 22;//-->隐式装箱/包
//
//        int c = a.intValue();//-->拆箱
//        System.out.println(c);


        //关于包装类需要注意的是：
        Integer a = 100;
        Integer b = 100;
        System.out.println(a==b);
        //打印为true

        Integer a1 = 200;
        Integer b1 = 200;
        System.out.println(a1==b1);
        //打印为false


        //为什么当赋值100时，两个相等；当赋值为200时，两个不相等呢？
        //答：其主要原因在于装箱过程
        /**
         * Java包装类的装箱依赖于 valueOf 方法
         * 而在Java中对于 valueOf 的实现为：
         * 1：当赋值的数为-128~127时，会从其数组中赋值
         * 2：当所赋值的数不属于该范围时，会重新new一个新的对象*/

        //由此我们不难得知，当赋值100时，是在同一个数组中进行取值，故地址相同
        //但是当赋值为200时，其时重新new了一个对象，那么地址肯定不同

    }
    public static void main1(String[] args) {
//        Solution test = new Solution();
//        Scanner in = new Scanner(System.in);
//        String a = in.nextLine();
//        String b = in.nextLine();
//
//        System.out.println(test.addStrings(a, b));
        StringBuffer str = new StringBuffer("");
        str.reverse().toString();

    }

}